package com.itqf.sms.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.itqf.sms.dto.CommonsDto;
import com.itqf.sms.pojo.User;
import com.itqf.sms.service.UserService;
import com.itqf.sms.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * projectName: springboot_part
 *
 * @author: 赵伟风
 * time: 2021/9/18 14:09
 * description:用户模块对应接口控制器
 */
@RestController
@CrossOrigin("*")
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * spirngMvc简化参数接受
     *    1.形参列表 String account,String password
     *    2.实体接参 User user
     *    3.json User user @RequestBody
     * @return
     */
    @PostMapping("login")
    public Object login(@RequestBody User user){
        //1.接收前端传递的参数

        //2.调用业务层,完成登录业务
        R r = userService.login(user);
        //3.负责将业务的返回值,返回给前端
        return r;
    }


    /**
     * 根据关键字进行用户信息查询接口
     * @param key
     * @return
     */
    @GetMapping("list")
    public Object list( String key){

        R r = userService.findUserList(key);

        return r;
    }


    /**
     * 根据id删除用户信息接口
     * @param id
     * @return
     */
    @GetMapping("delete")
    public  Object delete(int id){

        R r = userService.removeUserById(id);

        return r;
    }


    /**
     * 添加用户接口
     * @param user
     * @return
     */
    @PostMapping("save")
    public Object save(@RequestBody User user){
        R r = userService.saveUser(user);
        return r;
    }

    /**
     * 修改用户接口
     * @param user
     * @return
     */
    @PostMapping("update")
    public Object update(@RequestBody User user){
        R r = userService.updateUser(user);
        return r;
    }

    /**
     * 修改密码接口
     * @param commonsDto
     *   思路1: 创建一个dto类! 类的作用就是为了接值!
     *       pojo: 实体类 - 对应数据存储
     *       vo: view object,返回前端的数据类型  code msg data --> R
     *       dto: data transfer object 数据接收和传输对象
     *             1.接收前端传递的数据 account old now  dto
     *             2.方便数据由controller传向service
     *      注意: 如果返回给前端的数据pojo直接满足,那么就直接返回pojo即可!
     *            如果接收前端传递的数据,前端传递的数据完全可以pojo接值,那么也不需要创建dto!
     *   思路2: 直接获取json字符串,使用jackson进行解析取值
     *      步骤1: 形参列表声明一个字符串变量,并使用@RequestBody修改!
     *      步骤2: 创建一个Jackson的处理类,ObjectMapper - new
     *      步骤3: 将json字符串转化成JsonNode
     *      步骤4: 读取JSON的属性值
     *         jackson提供的一个解析类!可以将json字符串 转成json对象,再取值
     *         ObjectMapper objectMapper = new ObjectMapper();
     *         JsonNode jsonNode = objectMapper.readTree(json);
     *         //对象获取属性
     *         String old = jsonNode.get("old").toString();
     *         //对象获取对象  new 吴彦祖()
     *         JsonNode obj = jsonNode.get("obj");
     *         String name = obj.get("name").toString();
     *         //对象获取数组
     *         JsonNode arr = jsonNode.get("arr");
     *         //数组获取对象
     *         for (JsonNode node : arr) {
     *             String name1 = node.get("name").toString();
     *         }
     *         //注意: {account:,old:"",now:"",obj:{name:""},arr:[{name:""},{name:""}]}
     *
     * @return
     */
    @PostMapping("change")
    public Object change(@RequestBody CommonsDto commonsDto) throws JsonProcessingException {

        R r = userService.changeUser(commonsDto);

        return r;
    }







}
